NumPy jest pakietem szczególnie przydatnym do obliczeń w dziedzinie algebry liniowej. W uczeniu maszynowym algebra liniowa będzie miała duże znaczenie.
Wektor o wymiarach $1 \times N$
$$ X = \begin{pmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{N} \end{pmatrix} $$i jego transpozycję $\mathbf{x}^{T} = (x_{1}, x_{2},\ldots,x_{N})$ można wyrazić w Pythonie w następujący sposób:
In [2]:
import numpy as np
x = np.array([[1,2,3]]).T
xt = x.T
x.shape
Out[2]:
In [4]:
xt.shape
Out[4]:
Macierz kolumnowa w NumPy. $$X = \begin{pmatrix} 3 \\ 4 \\ 5 \\ 6 \end{pmatrix}$$
In [6]:
x = np.array([[3,4,5,6]]).T
x
Out[6]:
A macierz wierszowa w NumPy. $$ X = \begin{pmatrix} 3 & 4 & 5 & 6 \end{pmatrix}$$
In [8]:
x = np.array([[3,4,5,6]])
x
Out[8]:
matrix
Macierze ogólne omówiliśmy już w poprzednich dokumentach:
$$A_{m,n} = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix}$$Oprócz obiektów typu array
istnieje wyspecjalizowany obiekt matrix
, dla którego operacje *
(mnożenie) oraz **-1
(odwracanie) są określone w sposób właściwy dla macierzy (w przeciwieństwu do operacji elementowych dla obietków array
).
In [46]:
x = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
x
Out[46]:
In [48]:
X = np.matrix(x)
X
Out[48]:
In [9]:
a = np.array([[3,-9],[2,5]])
np.linalg.det(a)
Out[9]:
In [59]:
A = np.array([[-4,-2],[5,5]])
A
Out[59]:
In [60]:
invA = np.linalg.inv(A)
invA
Out[60]:
In [61]:
np.round(np.dot(A,invA))
Out[61]:
Ponieważ $AA^{-1} = A^{-1}A = I$.
In [15]:
a = np.diag((1, 2, 3))
a
Out[15]:
In [18]:
w,v = np.linalg.eig(a)
w
Out[18]:
In [20]:
v
Out[20]:
Zapisz i oblicz za pomocą NumPy
iloczn macierzy $A$ z wektorem $\vec{x}$: $$\begin{align*} A \vec{x} &= \left[ \begin{array}{rrr} 1 & -1 & 2\\ 0 & -3 & 1 \end{array} \right] \left[ \begin{array}{l} 2\\1\\0 \end{array}
\left[ \begin{array}{r} 1\\ -3 \end{array} \right]. \end{align*}$$
iloczyn macierzy $A$ i $B$:
$$\begin{align*}
AB &=\left[
\begin{array}{rrr}
0 & 4 & -2\\
-4 & -3 & 0
\end{array} \right] \left[ \begin{array}{rr}
0 &1\\
1 & -1\\
2 & 3
\end{array}
\left[ \begin{array}{rr}
0 & -10\\
-3 & -1
\end{array} \right]. \end{align*}$$
Pokaż, że dla powyśzych macierzy $A$ i $B$ prawdą jest, że $(AB)^T = B^TA^T$.
A**-1
dla obiektów typu array
i matrix
? Pokaż na przykładzie. 1 & 2 & 3\\
1 & 3 & 6 \\
\end{array}
\right]$ oraz wektora $\vec{y} = \left[
\begin{array}{r}
5 \\
6 \\
\end{array}
\right]$ oblicz wynikowy wektor:
$$\vec{\theta} = (X^TX)^{-1}X^T\vec{y} = \left[
\begin{array}{r}
-11.75\\
8.5 \\
-0.6875 \\
\end{array}
\right]$$. Wykonaj te same obliczenia raz na obiektach typu array
i raz na obiektach typu matrix
. W przypadku obiektów typu matrix
użyj możliwie krótki zapis.